<?php
namespace App\Library;
//
use App\Curl;
use Storage;
//use Image;
///**
// * 图片压缩类：通过缩放来压缩。
// * 如果要保持源图比例，把参数$percent保持为1即可。
// * 即使原比例压缩，也可大幅度缩小。数码相机4M图片。也可以缩为700KB左右。如果缩小比例，则体积会更小。
// *
// * 结果：可保存、可直接显示。
// */
//class PicCompress{
//
//    static function ImgCompress($src, $percent = 0.5)
//    {
//        $size = self::SizeImage($src, $percent);
//        //获取后缀
//        $return = $size['mime'];
//        $fix = str_after($return,'/');
//        //图片处理
//        $img = Image::make($src);//->resize($size['width'], $size['height']);
//        $path = Storage::disk('public')->path('');
//        $img->save($path.'bar.'.$fix);
//        $image = $path . 'bar.'.$fix;
//        return self::ImgSave($image,$fix);
//    }
//
//
//
//    /*
//     * 尺寸
//     */
//    static function SizeImage($src,$percent)
//    {
//        list($width, $height) = getimagesize($src);
//        return ['width'=>$width*$percent, 'height'=>$height*$percent,'mime'=>getimagesize($src)['mime']];
//    }
//
//    /*
//     * 保存
//     */
//    static function ImgSave($image,$fix)
//    {
//
//        $filename = Curl::CreateUuid().'.'.$fix;
//        Storage::disk('oss')->put($filename, fopen($image,'r'));
//        Storage::disk('public')->delete('bar.'.$fix);
//        return $filename;
//    }
//
//
//    static function Img2Base64 ($image_file) {
//        $image_info = getimagesize($image_file);
//        $image_data = fread(fopen($image_file, 'r'), filesize($image_file));
//        $base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data));
//        return $base64_image;
//    }
//
//}

/**
 * 图片压缩类：通过缩放来压缩。
 * 如果要保持源图比例，把参数$percent保持为1即可。
 * 即使原比例压缩，也可大幅度缩小。数码相机4M图片。也可以缩为700KB左右。如果缩小比例，则体积会更小。
 *
 * 结果：可保存、可直接显示。
 */
class PicCompress{

    /** 高清压缩图片
     * @param string $saveName  提供图片名（可不带扩展名，用源图扩展名）用于保存。或不提供文件名直接显示
     */
    static function CompressImg($src,$percent=0.5)
    {
        $image = self::OpenImage($src,$percent);
//        return $image;
        return self::SaveImage($image);  //保存
    }
    /**
     * 内部：打开图片
     */
    static private function OpenImage($src, $percent=0.5)
    {
        list($width, $height, $type, $attr) = getimagesize($src);
        $imageinfo = array(
            'width'=>$width,
            'height'=>$height,
            'type'=>image_type_to_extension($type,false),
            'attr'=>$attr
        );
        $type = $imageinfo['type'];
        $fun = "imagecreatefrom".$imageinfo['type'];
        $image = $fun($src);
        $new_width = $imageinfo['width'] * $percent;
        $new_height = $imageinfo['height'] * $percent;
        $image_thump = imagecreatetruecolor($new_width,$new_height);
        //将原图复制带图片载体上面，并且按照一定比例压缩,极大的保持了清晰度
        imagecopyresampled($image_thump,$image,0,0,0,0,$new_width,$new_height,$imageinfo['width'],$imageinfo['height']);
        imagedestroy($image);
        return compact('image_thump', 'type');
    }

    /**
     * 保存图片到硬盘：
     * @param  string $dstImgName  1、可指定字符串不带后缀的名称，使用源图扩展名 。2、直接指定目标图片名带扩展名。
     */
    static private function SaveImage($image)
    {
        $file = $image['image_thump'];
        $fix = $image['type'];
        $filename = Curl::CreateUuid().'.'.$fix;
        $funcs = "image".$fix;
        $funcs($file,Storage::disk('public')->path('').$filename);
        Storage::disk('oss')->put($filename, fopen(Storage::disk('public')->path('').$filename,'r'));
        Storage::disk('public')->delete($filename);
        return $filename;
    }

}